package com.example.demo.sevice.imp;

import com.example.demo.controller.data.ReturnData;
import com.example.demo.dao.UserDao;
import com.example.demo.entity.User;
import com.example.demo.sevice.UploadService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * 上传文件的实现类
 */
@Service
public class UploadServiceImp implements UploadService {
    @Autowired
    UserDao userDao;
    @Value("${server.port}")
    private String port;
    @Value("${ip}")
    private String ipAddress;
    @Value("${uploadPath}")
    private String uploadPath;
    /**
     * 上传头像的实现类
     * @param id
     * @param file
     * @return
     */
    @Override
    public ReturnData uploadAvater(int id, MultipartFile file) throws IOException {
        String filename = file.getOriginalFilename();//获取上传的文件名称
        String dirPath = uploadPath+"file/";//设置保存的文件目录
        File filePath = new File(dirPath);
        if(!filePath.exists()){//表示D:\file是不是存在这个文件夹
            filePath.mkdirs();//不存在就创建对应的文件夹
        }
        File newFile = new File(dirPath+filename);
        file.transferTo(newFile);//将上传的文件保存在D：\file

        //查找对应的用户信息
        try {
            User user = userDao.findById(id).get();
            //理论上应该是ip地址+端口，images是虚拟路径，是在CORSConf文件夹中设置虚拟路径和实体路径的映射
            user.setAvtar("http://"+ipAddress+":"+port+"/images/"+filename);//把新头像设置到学生信息里面
            userDao.save(user);//更新
            return ReturnData.ok("修改头像成功");
        }catch (Exception e){
            return ReturnData.error("找不到对应的用户");
        }
    }
    /**
     * 通用的上传文件接口
     * @param type  用来区分不同业务的文件，1头像 2朋友圈的图片 3文章图片 4轮播图图片 5个人背景图
     * @param file 上传的文件
     * @return
     * @throws IOException
     */
    @Override
    public ReturnData uploadFile(int type, MultipartFile file) throws IOException {
        //把文件名称分割，获取到文件名
        String[] strs = file.getOriginalFilename().split("\\.");
        //UUID.randomUUID()  可以生成一个不会重复的字符串
        String filename = UUID.randomUUID().toString()+"."+strs[strs.length-1] ;//获取上传的文件名称

        String dirPath = "";
        String env= "";
        if(type==1){//头像
            dirPath = uploadPath+"file/avatar/";
            env = "avatar/";
        }else if(type==2){//圈子
            dirPath = uploadPath+"file/circle/";
            env = "circle/";
        }

        File filePath = new File(dirPath);
        if(!filePath.exists()){//表示D:\file是不是存在这个文件夹
            filePath.mkdirs();//不存在就创建对应的文件夹
        }
        File newFile = new File(dirPath+filename);
        file.transferTo(newFile);//将上传的文件保存在D：\file

        return ReturnData.ok("http://"+ipAddress+":"+port+"/"+env+filename);
    }
}
